package org.springframework.boot.aa;


import org.springframework.util.ObjectUtils;

import java.math.BigDecimal;

/**
 *  BigDecimal工具类
 *
 * @author: 李梓俊
 * @Date: 2023/2/16 10:35
 * @Version 1.0[当前版本号]
 */

public class BigDecimalUtil {


    /**
     * 数值相加，如存在空值，替换成 0，避免空指针异常
     *
     * @param b1 参数1
     * @param b2 参数2
     * @return BigDecimal
     */
    public static BigDecimal add(BigDecimal b1, BigDecimal b2) {
        if (ObjectUtils.isEmpty(b1)) {
            b1 = BigDecimal.ZERO;
        }
        if (ObjectUtils.isEmpty(b2)) {
            b2 = BigDecimal.ZERO;
        }
        return b1.add(b2);
    }


    public static boolean equals(BigDecimal b1, BigDecimal b2) {
        return b1.equals(b2);
    }


    /**
     * 数值相减，如存在空值，替换成 0，避免空指针异常
     *
     * @param b1 参数1
     * @param b2 参数2
     * @return BigDecimal
     */
    public static BigDecimal subtract(BigDecimal b1, BigDecimal b2) {
        if (ObjectUtils.isEmpty(b1)) {
            b1 = BigDecimal.ZERO;
        }
        if (ObjectUtils.isEmpty(b2)) {
            b2 = BigDecimal.ZERO;
        }
        return b1.subtract(b2);
    }


    /**
     * 数值相减，如存在空值，替换成 0，避免空指针异常
     *
     * @param b1 参数1
     * @param b2 参数2
     * @return BigDecimal
     */
    public static BigDecimal subtract(BigDecimal b1, BigDecimal b2, BigDecimal b3) {
        if (ObjectUtils.isEmpty(b1)) {
            b1 = BigDecimal.ZERO;
        }
        if (ObjectUtils.isEmpty(b2)) {
            b2 = BigDecimal.ZERO;
        }
        if (ObjectUtils.isEmpty(b3)) {
            b3 = BigDecimal.ZERO;
        }
        return b1.subtract(b2).subtract(b3);
    }

    /**
     * 数值相乘，如存在空值，替换成 0，避免空指针异常
     *
     * @param b1 参数1
     * @param b2 参数2
     * @return BigDecimal
     */
    public static BigDecimal multiply(BigDecimal b1, BigDecimal b2) {
        if (ObjectUtils.isEmpty(b1)) {
            b1 = BigDecimal.ZERO;
        }
        if (ObjectUtils.isEmpty(b2)) {
            b2 = BigDecimal.ZERO;
        }
        return b1.multiply(b2);
    }

    /**
     * 类型转化
     *
     * @param b1 参数1
     * @return BigDecimal
     */
    public static BigDecimal valueOf(Object b1) {
        if (ObjectUtils.isEmpty(b1)) {
            return BigDecimal.ZERO;
        }
        return new BigDecimal(b1.toString());
    }



    public static BigDecimal maxTransform(BigDecimal maxThreshold) {
        if (ObjectUtils.isEmpty(maxThreshold)) {
            return BigDecimal.ZERO;
        }
        if(maxThreshold.compareTo(new BigDecimal(-1))==0) {
            return BigDecimalUtil.valueOf(Long.MAX_VALUE);
        }else{
            return maxThreshold;
        }
    }



    /**
     * 数值相乘，如存在空值，替换成 0，避免空指针异常
     *
     * @param b1 参数1
     * @param i2 参数2
     * @return BigDecimal
     */
    public static BigDecimal multiply(BigDecimal b1, Integer i2) {
        if (ObjectUtils.isEmpty(b1)) {
            b1 = BigDecimal.ZERO;
        }
        BigDecimal b2 = BigDecimal.ZERO;
        if (!ObjectUtils.isEmpty(i2)) {
            b2 = new BigDecimal(i2);
        }
        return b1.multiply(b2);
    }


    public static BigDecimal min(BigDecimal b1, BigDecimal b2) {
        if(b1.compareTo(b2) < 0){
            return b1;
        }
        return b2;
    }
}
